package com.pan.test.service;

import com.pan.test.entity.dto.SessionAdminDto;
import com.pan.test.entity.dto.SessionWebUserDto;
import com.pan.test.entity.po.UserInfo;
import com.pan.test.entity.query.UserInfoQuery;
import com.pan.test.entity.vo.PaginationResultVO;

import java.util.List;
import java.util.Map;


/**
 * 用户信息 业务接口
 */
public interface UserInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<UserInfo> findListByParam(UserInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(UserInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<UserInfo> findListByPage(UserInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(UserInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<UserInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<UserInfo> listBean);

	/**
	 * 根据UserId查询对象
	 */
	UserInfo getUserInfoByUserId(String userId);


	/**
	 * 根据UserId修改
	 */
	Integer updateUserInfoByUserId(UserInfo bean, String userId);


	/**
	 * 根据UserId删除
	 */
	Integer deleteUserInfoByUserId(String userId);


	/**
	 * 根据Email查询对象
	 */
	UserInfo getUserInfoByEmail(String email);


	/**
	 * 根据Email修改
	 */
	Integer updateUserInfoByEmail(UserInfo bean, String email);


	/**
	 * 根据Email删除
	 */
	Integer deleteUserInfoByEmail(String email);


	/**
	 * 根据NickName查询对象
	 */
	UserInfo getUserInfoByNickName(String nickName);


	/**
	 * 根据NickName修改
	 */
	Integer updateUserInfoByNickName(UserInfo bean, String nickName);


	/**
	 * 根据NickName删除
	 */
	Integer deleteUserInfoByNickName(String nickName);


	/**
	 * 根据QqOpenId查询对象
	 */
	UserInfo getUserInfoByQqOpenId(String qqOpenId);


	/**
	 * 根据QqOpenId修改
	 */
	Integer updateUserInfoByQqOpenId(UserInfo bean, String qqOpenId);


	/**
	 * 根据QqOpenId删除
	 */
	Integer deleteUserInfoByQqOpenId(String qqOpenId);


	SessionWebUserDto login(String email, String password);

	void register(String email, String nickName, String password, String emailCode);

	void resetPwd(String email, String password, String emailCode);

	void updateUserStatus(String userId, Integer status);

	SessionWebUserDto qqLogin(String code);

	void changeUserSpace(String userId, Integer changeSpace);

    SessionAdminDto adminLogin(String email, String password, String invitationCode);

	/**
	 * 根据条件查询数量
	 */
	Integer findCount(UserInfoQuery param);

	/**
	 * 获取用户注册趋势
	 */
	List<Map<String, Object>> getUserTrend(Integer days);

	/**
	 * 创建新用户
	 */
	void createUser(String email, String nickName, String password, Integer useSpace);

	/**
	 * 删除用户
	 */
	void deleteUser(String userId);

	/**
	 * 更新用户信息
	 */
	void updateUserInfo(UserInfo userInfo);

	/**
	 * 获取用户信息
	 */
	UserInfo getUserInfo(String userId);
}